stillpoint
Lightweight local observability: a FastAPI collector with a live dashboard for requests, logs, spans, and quick correlation by trace/request IDs.
Install (PyPI)
python -m pip install -U stillpoint
Quick start
1) Run the collector
stillpoint
Open http://127.0.0.1:7000/.
2) Instrument a FastAPI app
from stillpoint.agent import install_observability
client = install_observability(
app_instance,
collector_url="http://127.0.0.1:7000/ingest",
token="dev-secret",
service_name="my-api:8000",
emit_request_span=True, # optional single span per request
)
3) Tail access logs instead (no code changes)
set OBS_LOG_FILES=serviceA=/path/to/access.log
set OBS_TAIL_FROM_START=1
stillpoint
Usage scenarios
Single service + live UI
Run the collector, instrument your API, then browse the dashboard to:
- see live request volume, error rates, and p95 latency
- view recent requests and open trace details
- export a trace bundle as JSON
Multiple services
Point multiple services at the same collector URL with different service_name
values. The dashboard will tag and filter by service.
Access-log only mode
When code changes are not possible, tail access logs via OBS_LOG_FILES.
Note: spans and per-request logs are not available unless emitted by the app.
Configuration
Collector environment variables:
OBS_TOKEN: bearer token for/ingest(defaultdev-secret)OBS_HOST,OBS_PORT: bind host/port (defaults127.0.0.1:7000)OBS_RELOAD: set to1for reload (dev only)OBS_LOG_LEVEL: uvicorn log level (defaultinfo)OBS_WINDOW_S: metrics window seconds (default120)OBS_MAX_EVENTS: SSE buffer size (default30000)OBS_LOG_FILES: tail access logs (comma-separatedsvc=/path.log)OBS_TAIL_FROM_START: set1to read logs from startOBS_SLOW_MS: slow request threshold (default750)OBS_SAMPLE_RATE: sample rate for normal traffic (default0.05)OBS_TRACE_STORE: max traces stored (default2000)OBS_TRACE_LOGS: max logs per trace (default200)OBS_TRACE_SPANS: max spans per trace (default200)OBS_RECENT_REQS: max recent requests kept (default2000)
Agent config (per app):
collector_url,token,service_nameininstall_observabilityemit_request_span=Trueto get a default request span
Data points collected
Events emitted and stored:
req_start/req_end: method, path/route, status, duration, client info,trace_id,span_id,request_id, plus headers subsetlog: level, logger, message, optional tracespan: name, duration, optional metadata (type,db,http,cache)gauge: used for inflight counts when emitted by the app
Derived metrics:
- RPS, error rates, status buckets (2xx/3xx/4xx/5xx)
- per-endpoint p50/p95/p99 and tail latency thresholds
- recent requests list and slowest individual traces
Local development
Run from source (no install):
python -m uvicorn stillpoint.collector_app:app --app-dir src --host 127.0.0.1 --port 7000 --reload
Tests:
python -m pytest
Code structure:
src/stillpoint/collector_app.py: FastAPI collector + metrics + APIsrc/stillpoint/agent.py: app-side middleware + log handlersrc/stillpoint/ui/: dashboard assets
Metadata
Release files for stillpoint 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| stillpoint-0.1.2.tar.gz | 25.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| stillpoint-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.4 kB
Release files / stillpoint-0.1.2.tar.gz
| Download URL | stillpoint-0.1.2.tar.gz |
|---|---|
| Size | 25.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
815c361f5f1a23020e6d22fa7da3dae87c5eb259933dd13cc32ccfe639f66af0
|
|
BLAKE2b-256 checksum How to use checksums |
3331769764f41762b42f8a4837da010607350574359edc0fe0c70d303eef2850
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.0
|
Release files / stillpoint-0.1.2-py3-none-any.whl
| Download URL | stillpoint-0.1.2-py3-none-any.whl |
|---|---|
| Size | 22.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d826ee27d9f47ce81f4fea7cd91df04a0fe7ee22601b41c747631f1b4c02cf72
|
|
BLAKE2b-256 checksum How to use checksums |
1394b491b234c51d6d4cc9f19e58544bd7485fb32c75542f74b4acaac40f970c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.0
|
Security for stillpoint 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.